Developer(s) | XLOG Technologies GmbH |
---|---|
Preview release | 0.9.2 / January 5th, 2012 |
Written in | Java |
Operating system | Cross-platform |
Available in | English |
Type | Prolog |
Website | Jekejeke Home Page |
Jekejeke Prolog is an interpreter only implementation of Prolog written in 100% Java. The interpreter exists in two flavors. The runtime library provides an embeddable Prolog interpreter without any user interface. The development environment provides a simple console interface whereby the developer can execute and debug Prolog texts.
The implementation of the language mainly follows the ISO core standard.[1] The implementation also features an application programming interface. It is possible to write Prolog applications that use Java foreign predicates and that make use of multi-threading. To a great extend such applications can already be tested in the development environment before they are independently deployed via the runtime library.
Since release 0.9.0 Jekejeke Prolog features Just-in-time clause indexing[2] over multiple arguments. This changes fundamentally how predicates are executed. Predicates that would be non-deterministic in normal Prolog systems are suddently deterministic. Here is an example, take the following higher-order Prolog text:
map(_,[],[]). map(F,[X|Y],[Z|T]) :- call(F,X,Z), map(F,Y,T).
Now most of the Prolog systems that use first argument indexing will determine that the following query is deterministic:
?- X=[1,2], map(=,X,Y). Y = [1,2]
But only a few Prolog systems, that can handle multiple indexes, will determine as well that the following query is deterministic:
?- Y=[1,2], map(=,X,Y). X = [1,2]
Just-in-time clause indexing does not require that the multiple indexes are declared by the end-user. The indexes are automatically determined from the call patterns at runtime.